// 定义：异步回调地狱是指嵌套的回调函数中处理多个异步操作，导致代码变得难以维护和扩展
asyncFunc1(function(result1) {
  asyncFunc2(result1, function(result2) {
    asyncFunc3(result2, function(result3) {
      // 处理最终结果
    });
  });
});

//读取文件1
//读取文件2
//将读取文件1和文件2的内容合并
//将合并后的内容写入到文件3中
fs.readFile('file1.txt', (err, data1) => {
  if (err) {
    console.error(err);
    return;
  }
  fs.readFile('file2.txt', (err, data2) => {
    if (err) {
      console.error(err);
      return;
    }

    const margeData = data1 + data2;
    fs.writeFile('file3.txt', margeData, (err) => {
      if (err) {
        console.error(err);
        return;
      }

      console.log('文件合并成功');
    });
  })
})



// 解决办法：使用promise对象：peomise的出现主要解决异步回调地狱，是一种处理异步操作的方式，它允许你
// 链式调用.then()方法，以便清晰的处理异步操作，并避免回调地狱的问题
asyncFunc1()
  .then(result1 => asyncFunc2(result1))
  .then(result2 => asyncFunc3(result2))
  .then(result3 => {
    // 处理最终结果
  })
  .catch(err => {
    // 处理错误
  });


  //使用async/await， async/await是一种更加简洁的方式来处理异步操作，它允许你使用类似的同步代码的方式来处理异步操作。他使得代码更加易读和维护，并且避免了回调地狱的问题。
  async function fetchData() {
    try {
      const result1 = await asyncFunc1();
      const result2 = await asyncFunc2(result1);
      const result3 = await asyncFunc3(result2);
    } catch (err) {
      // 处理错误
    }
  }
